package com.lantosec.hmrp.modules.eval.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.eval.entity.EvalDetailedItem;
import com.lantosec.hmrp.modules.eval.entity.EvalPlanTarget;
import com.lantosec.hmrp.modules.eval.entity.EvalTask;
import com.lantosec.hmrp.modules.eval.vo.EvalDetailedItemVO;
import com.lantosec.hmrp.modules.eval.vo.EvalDetailedVO;
import com.lantosec.hmrp.modules.eval.vo.EvalPlanVO;
import com.lantosec.hmrp.modules.eval.vo.EvalTypeVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 考评任务 Mapper 接口
 * </p>
 *
 * @author AutoCode
 * @since 2020-03-30
 */
public interface EvalTaskMapper extends BaseMapper<EvalTask> {

    /**
     * 查询考评计划基本信息
     * @param startDate
     * @param endDate
     * @param evalPlanName
     * @param evalPlanCycle
     * @param evalPlanType
     * @param evalMode
     * @param state
     * @param userId
     * @return
     */
    List<EvalPlanVO> getNotFinishedTask(PageVO<EvalPlanVO> page, @Param("startDate") String startDate,
            @Param("endDate") String endDate, @Param("evalPlanName") String evalPlanName,
            @Param("evalPlanCycle") Integer evalPlanCycle,
            @Param("evalPlanType") Integer evalPlanType, @Param("evalMode") Integer evalMode,
            @Param("state") Integer state, @Param("permissionsType")Integer permissionsType,@Param("userId")String userId);

    /**
     * 查询任务id下的考评项目分类
     * @param evalTaskId
     * @return
     */
    List<EvalTypeVO> getEvalType(@Param("evalTaskId") Integer evalTaskId);

    /**
     * 查询考评任务下的项目类型下的所有项目
     * @param evalTypeId
     * @return
     */
    List<EvalDetailedItemVO> getEvalDetailedItem(@Param("evalTypeId") String evalTypeId,@Param("evalDetailedId") Integer evalDetailedId);


    /**
     * 查询出考评对象下的考评项目信息列表
     * @param evalDetailedId
     * @return
     */
    List<EvalDetailedItemVO> getEvalItemByEvalDetailedId(@Param("evalDetailedId") Integer evalDetailedId);

    /**
     * 查询对象被考评的次数列表
     * @param planTargetId
     * @return
     */
    List<EvalDetailedVO> getEvalDetailed(@Param("planTargetId") Integer planTargetId, @Param("targetMode") Integer targetMode);

    /**
     * 查询已完成的考评任务
     * @param page
     * @param startDate
     * @param endDate
     * @param executorUser
     * @param evalPlanCycle
     * @param evalPlanType
     * @param evalMode
     * @return
     */
    List<EvalPlanVO> getFinishedTask(PageVO<EvalPlanVO> page, @Param("startDate") String startDate, @Param("endDate")String endDate,
                                     @Param("executorUser") String executorUser, @Param("evalPlanCycle") Integer evalPlanCycle,
                                     @Param("evalPlanType") Integer evalPlanType, @Param("evalMode") Integer evalMode,
                                     @Param("permissionsType") Integer permissionsType,@Param("userId") String userId);

    /**
     * 查询考评项目中项目分值/项目得分/项目金额的总和
     * @param evalDetailedId
     * @return
     */
    EvalDetailedItem querySum(@Param("evalDetailedId") Integer evalDetailedId);

    /**
     * 查询出考评对象周期内执行次数最大次数
     * @return
     */
    Integer queryPerformNum(@Param("evalTaskId") Integer evalTaskId);

    /**
     * 查询已完成任务的考评对象所对应的考评项目
     * @param evalDetailedId
     * @return
     */
    List<EvalDetailedItemVO> getFinishedEvalDetailed(@Param("evalDetailedId") Integer evalDetailedId);

    /**
     * 查询出考评任务的所有事项的加减总分
     * @param evalDetailedId
     * @return
     */
    BigDecimal getRewardValueSum(@Param("evalDetailedId") Integer evalDetailedId);

    /**
     * 查询考评计划中的考评对象数
     * @param evalPlanId
     * @return
     */
    List<EvalPlanTarget> getEvalPlanTarget(@Param("evalPlanId") Integer evalPlanId, @Param("targetMode") Integer targetMode);

}
